package com.example.study1.ObjectorientedProcessoriented;

/**
 * 面向对象编程示例：购买手机
 * 关注的是对象和对象间的交互，用户只需发出指令
 */
public class ObjectOrientedPhonePurchase {

    // 秘书类 - 封装了购买手机的专业能力
    static class Secretary {
        private String name;// 秘书姓名

        public Secretary(String name) {
            this.name = name;// 使用this区分参数和字段
        }

        /**
         * 秘书负责处理购买手机的所有细节
         * 封装了复杂的购买流程
         */
        public void buyPhoneForBoss() {
            System.out.println(name + "开始处理手机购买事务...");
            searchInformation();    // 搜索信息
            placeOrder();           // 下单购买
            receivePackage();       // 接收快递
            initialSetup();         // 初始设置
            System.out.println(name + "已完成手机购买和基础设置");
        }

        private void searchInformation() {
            System.out.println(name + "正在调研手机市场和用户评价...");
        }

        private void placeOrder() {
            System.out.println(name + "正在选择合适的平台下单...");
        }

        private void receivePackage() {
            System.out.println(name + "正在签收和检查快递...");
        }

        private void initialSetup() {
            System.out.println(name + "正在进行基础设置和软件安装...");
        }
    }

    // 手机类 - 封装了手机的功能
    static class SmartPhone {
        private String brand;
        private String model;

        public SmartPhone(String brand, String model) {
            this.brand = brand;
            this.model = model;
        }

        /**
         * 手机被激活的方法
         */
        public void activate() {
            System.out.println(brand + " " + model + " 手机已激活");
        }

        /**
         * 手机的基本功能
         */
        public void use() {
            System.out.println("使用" + brand + " " + model + " 进行通信和娱乐");
        }
    }

    // 经理类 - 封装了用户角色
    static class Manager {
        private String name;

        public Manager(String name) {
            this.name = name;
        }

        /**
         * 经理只需要发出指令，不需要知道具体实现细节
         * 体现了面向对象的封装特性
         */
        public void requestNewPhone(Secretary secretary) {
            System.out.println(name + "：请帮我购买一部新手机");
            secretary.buyPhoneForBoss();  // 委托给秘书对象处理
            SmartPhone phone = new SmartPhone("Apple", "iPhone 15");
            phone.activate();  // 使用手机对象
            phone.use();       // 享受手机功能
            System.out.println(name + "：感谢，新手机很好用");
        }
    }

    public static void main(String[] args) {
        // 创建各个对象
        Manager manager = new Manager("张总");
        Secretary secretary = new Secretary("李秘书");

        // 对象间通过方法调用进行交互
        manager.requestNewPhone(secretary);
    }
}
/*

        张总：请帮我购买一部新手机
        李秘书开始处理手机购买事务...
        李秘书正在调研手机市场和用户评价...
        李秘书正在选择合适的平台下单...
        李秘书正在签收和检查快递...
        李秘书正在进行基础设置和软件安装...
        李秘书已完成手机购买和基础设置
        Apple iPhone 15 手机已激活
        使用Apple iPhone 15 进行通信和娱乐
        张总：感谢，新手机很好用
*/

